/*MyPhotoIndex Free Photo Organizer <www.myphotoindex.com>
  Copyright (C) <2006-2009>  <Asaf Yarkoni asaf@yarkoni.net>

  This program is free software: you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation, either version 3 of the License, or
  (at your option) any later version.

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with this program.  If not, see <http://www.gnu.org/licenses/>.*/
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections.Specialized;

namespace MyPhotoIndex.Utilities
{
    public class ImageCategoriesConvertor
    {
        private ImageCategoriesConvertor()
        {
        }

        public static int[] FromInt(int value)
        {
            if (value == 0)
            {
                return new int[0];
            }

            BitVector32.Section[] sections = new BitVector32.Section[5];

            int i = 0;
            sections[i++] = BitVector32.CreateSection(99);
            sections[i++] = BitVector32.CreateSection(99, sections[i - 2]);
            sections[i++] = BitVector32.CreateSection(99, sections[i - 2]);
            sections[i++] = BitVector32.CreateSection(99, sections[i - 2]);
            sections[i++] = BitVector32.CreateSection(99, sections[i - 2]);

            BitVector32 conv = new BitVector32(value);
            
            i = 0;
            List<int> list = new List<int>();
            for (i = 0; i < 5; i++)
            {
                int number = conv[sections[i]];
                if(number > 0)
                {
                    list.Add(number);
                }
            }

            return list.ToArray();
        }

        public static int ToInt(int[] categories)
        {
            if (categories.Length > 5)
            {
                throw new IndexOutOfRangeException("The maxium length is 5.");
            }

            BitVector32.Section[] sections = new BitVector32.Section[5];
            BitVector32 conv = new BitVector32();

            int i = 0;
            sections[i++] = BitVector32.CreateSection(99);
            sections[i++] = BitVector32.CreateSection(99, sections[i - 2]);
            sections[i++] = BitVector32.CreateSection(99, sections[i - 2]);
            sections[i++] = BitVector32.CreateSection(99, sections[i - 2]);
            sections[i++] = BitVector32.CreateSection(99, sections[i - 2]);

            i = 0;
            foreach (int categoryId in categories)
            {
                conv[sections[i++]] = categoryId;
            }

            return conv.Data;
        }
    }
}
